package org.dromara.oce.domain.dto;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.math.BigDecimal;

@Data
public class OceanEngineReportReqVO {
    /**
     *  回传的事件，例如”激活“、”付费“。详细列表见附录
     */
    @JSONField(name = "event_type")
    private String eventType;
    /**
     *  广告主可以针对每一次转化，回传一个这次转化的价值，单位是 RMB。
     */
    @JSONField(name = "event_weight")
    @Deprecated
    private BigDecimal eventWeight;
    /**
     *  包含一些关键的上下文信息
     */
    private Context context;

    @Data
    public static class Context {
        /**
         *  包含一些关键的广告相关信息
         */
        private Ad ad;
        /**
         *  传递一些归因的设备信息
         */
        private Device device;
        /**
         *  对于上报事件的附加属性，详情请见自定义属性的介绍。
         */
        private Properties properties;
        /**
         *  事件发生的毫秒级时间戳
         */
        private long timestamp;
        /**
         *  若上报有重复且需要去重，请填写该id，系统会根据该ID进行去重
         */
        @JSONField(name = "outer_event_id")
        private String outerEventId;

    }

    @Data
    public static class Ad {
        /**
         *  callback 字段有两个获取途径，对于监测链接归因的方式，需要从监测链接的__CALLBACK_PARAM__这个宏获取这个字段值；对于落地页或小程序归因的方式，需要从 url 中的 clickid 参数获取值。
         */
        private String callback;

        /**
         *  0：点击归因； 1：展示归因； 2：有效播放归因；   这个参数可以帮助广告主标识是通过哪种渠道进行的归因，如果不传，就会默认为点击归因。
         */
        @JSONField(name = "match_type")
        @Deprecated
        private Integer matchType;

    }

    @Data
    public static class Device{
        /**
         *  设备对应平台，安卓："android"，iOS："ios"，小写
         */
        private String platform;
        /**
         *  归因上的设备 imei(android) 的 MD5 值
         */
        private String imei;
        /**
         *  归因上的设备(ios)的 idfa 的原值
         */
        private String idfa;
        /**
         *  归因上的设备(android)的 oaid 的原值
         */
        private String oaid;

    }

    @Data
    public static class Properties {
        /**
         *  支付金额
         */
        @JSONField(name = "pay_amount")
        private BigDecimal payAmount;
        /**
         *  订单号
         */
        @JSONField(name = "order_id")
        private String orderId;
        /**
         *  转化时间
         */
        @JSONField(name = "conv_time")
        private long convTime;

    }


}
